Hapi.js is a small Node framework for developing back end web apps.
In this article, we’ll look at how to create back end apps with Hapi.js.
Method Not Allowed Error
We can throw a method not allowed error with @hapi/boom
‘s methodNotAllowed
method.
For instance, we can write:
const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const init = async () => {
const server = new Hapi.Server({
port: 3000,
host: '0.0.0.0'
});
server.route({
method: 'GET',
path: '/',
handler(request, h) {
throw Boom.methodNotAllowed('that method is not allowed');
}
});
await server.start();
console.log('Server running at:', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
Then we get:
{"statusCode":405,"error":"Method Not Allowed","message":"that method is not allowed"}
as the response.
We can set the Allow
header with the 3rd argument.
To do this, we write:
const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const init = async () => {
const server = new Hapi.Server({
port: 3000,
host: '0.0.0.0'
});
server.route({
method: 'GET',
path: '/',
handler(request, h) {
throw Boom.methodNotAllowed('that method is not allowed', 'data', ['foo', 'bar']);
}
});
await server.start();
console.log('Server running at:', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
Now we should see that Allow
response header has foo, bar
as its value.
Not Acceptable Error
We can call the Boom.notAcceptable
method to return a 406 error.
For instance, we can write:
const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const init = async () => {
const server = new Hapi.Server({
port: 3000,
host: '0.0.0.0'
});
server.route({
method: 'GET',
path: '/',
handler(request, h) {
throw Boom.notAcceptable('unacceptable');
}
});
await server.start();
console.log('Server running at:', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
Then we get:
{
"statusCode": 406,
"error": "Not Acceptable",
"message": "unacceptable"
}
as the response.
We can also pass in extra data into the 2nd argument.
Proxy Required Error
We call the Boom.proxyAuthRequired
method to return a 407 response.
For instance, we can write:
const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const init = async () => {
const server = new Hapi.Server({
port: 3000,
host: '0.0.0.0'
});
server.route({
method: 'GET',
path: '/',
handler(request, h) {
throw Boom.proxyAuthRequired('auth missing');
}
});
await server.start();
console.log('Server running at:', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
Then we get:
{
"statusCode": 407,
"error": "Proxy Authentication Required",
"message": "auth missing"
}
as the response.
We can also pass in more data as the 2nd argument.
Request Timeout
We can throw a request timeout error with the Boom.clientTimeout
method:
const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const init = async () => {
const server = new Hapi.Server({
port: 3000,
host: '0.0.0.0'
});
server.route({
method: 'GET',
path: '/',
handler(request, h) {
throw Boom.clientTimeout('timed out');
}
});
await server.start();
console.log('Server running at:', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
Then we get:
{"statusCode":408,"error":"Request Time-out","message":"timed out"}
as the response.
We can also pass in more data as the 2nd argument.
Conclusion
We can throw many types of errors easily with the @hapi/boom
module.